
package editeur;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Vector;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class BarreMenu extends JMenuBar{

	private JMenu m1,m2;
	private JMenuItem save,quit,open,create,newP;
	private PanneauMenu conteneur;
	private Fenetre fen;
	
	//Getters and Setters
	public PanneauMenu getConteneur() {
		return conteneur;
	}
	
	private boolean estSave() {
		return fen.getAlbCourant().isSaved();
	}

	//Constructeurs
	/**
	 * Constructeur de la barre de menu
	 */
	public BarreMenu(PanneauMenu p){
		
		conteneur=p;
		fen=getConteneur().getConteneur();
		//Menus
		m1=new JMenu("Fichier");
		m2=new JMenu("Edition");
		this.add(m1);
		this.add(m2);
		
		//Sous Menus
		save=new JMenuItem("Sauvegarder");
		quit=new JMenuItem("Quitter");
		open=new JMenuItem("Ouvrir");
		create=new JMenuItem("Creer nouveau");
		newP=new JMenuItem("Ajouter photo");
		m1.add(create);
		m1.add(open);
		m1.add(newP);
		m1.add(save);
		m1.add(quit);


		//Actions des boutons pour panIm
		
		create.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				if (!estSave()) {
					int ret = JOptionPane
							.showConfirmDialog(null,
									"Voulez vous sauvegarder avant de creer un nouvel album ?");
					switch (ret) {

					case (0)://Oui
					{
						boolean b = sauver();
						if (b == true)
							System.out.println("Album sauvegardé");
						else
							System.out
									.println("Probleme lors de la sauvegarde de l'album");

						String nom = JOptionPane
								.showInputDialog("Entrez le nom de l'album :");

						//Probleme si "annuler";
						if (nom.equals(""))
							creerAlb();
						else
							creerAlb(nom);
					}
					case (1)://non
					{
						String nom = JOptionPane
								.showInputDialog("Entrez le nom de l'album :");
						if (nom == null)
							nom = "";

						if (nom.equals(""))
							creerAlb();
						else
							creerAlb(nom);
					}
					case (2)://annuler	
					}
				}
			}
		});
		newP.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ajoutPhoto();
			}
		});
		save.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				boolean b = false;
				b = sauver();
				if (b == true)
					System.out.println("Album sauvegardé");
				else
					System.out
							.println("Probleme lors de la sauvegarde de l'album");

			}
		});
		quit.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (estSave()) {
					int ret = JOptionPane.showConfirmDialog(null,
							"Etes vous sure de vouloir quitter?");
					switch (ret) {
					case (0)://Oui
						System.exit(0);
					case (1)://non
					case (2)://annuler
					}
				} else {
					int ret = JOptionPane
							.showConfirmDialog(null,
									"Voulez vous quitter sans sauvegarder? (\"non\" sauvegarde et quitte)");
					switch (ret) {
					case (0)://Oui
						System.exit(0);
					case (1)://non
						sauver();
						System.exit(0);
					case (2)://annuler
					}
				}
			}
		});
		if (fen.isModePanIm()) 
		{
			open.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					Album a = charger();
					if (a != null) {
						fen.setAlbCourant(a);
						System.out.println("Album chargé");
						fen.getPanIm().repaint();
					} else
						System.out.println("Album non chargé");
				}
			});
			}
		else
		{
			open.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					Album a = charger();
					if (a != null) {
						fen.setAlbCourant(a);
						System.out.println("Album chargé");
						System.out.println("Album chargé ta "+fen.getAlbCourant().getAlbum().size());
						for (int j = 0; j < fen.getAlbCourant().getAlbum().size(); j++) {
							fen.getPanIG().add(new PanneauImageGrille(fen));
							fen.modPos(fen);
							fen.setNumIm(fen.getNumIm()+1);
							fen.add(fen.getPanIG().lastElement());
							fen.getPanIG().lastElement().repaint();
						}
					} else
						System.out.println("Album non chargé");
				}
			});
		}
	}
	
	//Methodes
	/**
	 * Cree un nouvel album
	 */
	public void creerAlb(){
		fen.setAlbCourant(new Album());
		fen.getAlbCourant().afficheAlbum();
	}
	/**
	 * Cree un album avec le nom passé en parametre
	 * @param s string , le nom du nouvel album
	 */
	public void creerAlb(String s){
		fen.setAlbCourant(new Album(s));
		fen.getAlbCourant().afficheAlbum();
	}
	/**
	 * Sauvegarde l'album en utilisant la fonction d'album Save(Fenetre f)
	 * @return la valeur renvoyé par la fonction de sauvegarde de l'album
	 */
	public boolean sauver(){
		Album alb=fen.getAlbCourant();
		//Fenetre fen=fen;
		try{
			return alb.Save(fen);
		}
		catch(IOException e){
			JOptionPane.showMessageDialog(null,"Probleme de sauvegarde IOExeption");
			return false;
		}
	}
	
	/**
	 * Crée et ajoute une photo à l'album en utilisant la fonction de album AddPhoto(Image p)
	 * @return la valeur renvoyé par la fonction d'ajout d'image de l'album
	 */
	public boolean ajoutPhoto(){
		boolean b=false;
		Album alb=fen.getAlbCourant();
		String str=JOptionPane.showInputDialog("Entrez le noms de la photo :");
		
		//Creation image
		String ref="";
        JFileChooser fc = new JFileChooser();
        File file=null;
        int returnVal=fc.showOpenDialog(null);
        if (returnVal == JFileChooser.APPROVE_OPTION)
        {
        	file = fc.getSelectedFile();
        	ref=file.getAbsolutePath();
        }
        else if(returnVal==JFileChooser.CANCEL_OPTION)
        	return false;
        
        Photo p=null;
		try {
			BufferedImage img = ImageIO.read(new File(ref));
			p = new Photo(str, img);
		} catch (IOException e) {
			System.out.println("Probleme lors du read");
		}
		
		//ajout photo  l'album
		b=alb.AddPhoto(p);
		alb.afficheAlbum();
		this.fen.getAlbCourant().setSaved(false);
		if(fen.isModePanIm())
			this.fen.getPanIm().repaint();
		else
		{
			this.fen.getPanIG().add(new PanneauImageGrille(fen));
			this.fen.modPos(this.fen);
			this.fen.setNumIm(this.fen.getNumIm()+1);
			this.fen.add(fen.getPanIG().lastElement());
			this.fen.getPanIG().lastElement().repaint();
		}
		return b;
	}
	/**
	 * Fonction qui permet le chargement de l'album
	 * @return l'album chargé
	 */
	@SuppressWarnings("unchecked")
	public Album charger()
    {
        JFileChooser fc = new JFileChooser();
        fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        File file=null;
        BufferedImage bimg;
        int returnVal=fc.showOpenDialog(fen);
        if (returnVal == JFileChooser.APPROVE_OPTION)
        {
        	file = fc.getSelectedFile();
        	if(file.exists())
        	{
        		Album alb=new Album(file.getName());
        		File[] images=null;
        		images=file.listFiles();
        		//images.size();
        		for(File f:images){
        			try {
						bimg=ImageIO.read(f);
						alb.getAlbum().add(new Photo(f.getName(),bimg));
					} catch (IOException e) {
						e.printStackTrace();
						JOptionPane.showMessageDialog(null,"Probleme lors du chargement de l'album");
						
					}
        			
        		}
        		alb.setIndice(1);
        		alb.afficheAlbum();
        		return alb;
        	}
        	else
        	{
        		System.out.println("Cet album n'existe pas");
        		return null;
        	}

        }
        else if(returnVal==JFileChooser.CANCEL_OPTION)
        {
        	return null;
        }
        else
        	return null;
    }

}

